Transportieren?

Eine Tabelle können Sie entweder als “Anwendungstabelle” oder als “Customizingtabelle” klassifizieren. Dies hat Auswirkungen auf den Pflegedialog: Eine Anwendungstabelle kann in jedem System geändert werden, eine Customizingtabelle kann nur geändert werden, wenn das System auf “änderbar” gesetzt ist. Anwendungsdaten können nicht transportiert werden… Oder doch?

Im folgenden Fall möchte ich Ihnen eine Lösung vorstellen, bei der Sie eine Tabelle in jedem System pflegen können und trotzdem Einträge aus dem Entwicklungsystem transportiert werden.

In diesem Fall werden automatisch neue Einträge in einen Transportauftrag übernommen. Bereits vorhandene Einträge werden nicht transportiert. Für neue Einträge hingegen wird ein Transportauftrag verlangt.

Um das zu realisieren, müssen Sie folgendes tun:

1. Tabelle anlegen

Legen Sie eine Customizingtabelle ZMYTAB an (Auslieferungsklasse “C“).

2. Pflegedialog generieren

Generieren Sie den Pflegedialog dazu.

Aktivieren Sie bitte das Häkchen “Keine oder individuelle Aufzeichnungsroutine”

3. Zeitpunkte und Coding erfassen

Nach dem Generieren des Pflegedialogs springen Sie bitte im Menü in die Zeitpunkte: Umfeld – Modifikationen – Zeitpunkte.

Dort müssen Sie die folgenden Zeitpunkte anlegen:

  • Zeitpunkt “01” ZZ_SICHERN_VORHER
  • Zeitpunkt “10” ZZ_TRANSPORT_KOPF
  • Zeitpunkt “12” ZZ_TRANSPORTTABELLE_AENDERN

Mit dem Druckknopf neben dem Routinennamen gelangen Sie in das Coding. Das System fragt nach einem Include, in dem die Unterroutinen angelegt werden sollen. Definieren Sie gegebenenfalls ein neues Include.

Coding für Zeitpunkt 01

Hier wird vor dem Sichern das Kennzeichen geändert, dass normalerweise bei “Keine Aufzeichnungsroutine” aktiv ist und den Transport verhindert.

FORM zz_sichern_vorher.

  PERFORM zz_check_transport.

ENDFORM.

Coding für Zeitpunkt 10

FORM zz_transport_kopf.

  PERFORM zz_check_transport.

ENDFORM.

Coding für Zeitpunkt 12

Beim Ändern der Transporttabelle werden alle Einträge wieder rausgeworfen, die nur geändert oder gelöscht worden sind, so dass nur die neu angelegten Einträge im Transportauftrag stehen.

FORM zz_transporttabelle_aendern.

  FIELD-SYMBOLS <key>.

  LOOP AT corr_keytab WHERE pgmid   = ‘R3TR’
                        AND object  = ‘TABU’
                        AND objname = x_header-roottab.
*** Keyfeld
    ASSIGN corr_keytab-tabkey(x_header-keylen) TO <key>.
*** Alle Einträge zur Tabelle prüfen:
    READ TABLE total INTO zmytab_total
         WITH KEY <key>.
    IF sy-subrc = 0 AND zmytab_total-action <> neuer_eintrag.
*** Wenn der Satz nur geändert oder gelöscht wurde, dann aus der
*** Transporttabelle löschen

      DELETE corr_keytab.
    ENDIF.

  ENDLOOP.

ENDFORM.                    ” ZZ_TRANSPORTTABELLE_AENDERN            

Coding zum Prüfen ob Transportauftrag benötigt wird

Achtung! Bitte setzen Sie bei SY-SYSID Ihr Entwicklungssystem ein! 

FORM zz_check_transport.

  DATA new.
  CLEAR new.

  IF sy-sysid = ‘TTE’. “Entwicklungssystem
*** Im Entwicklungssystem wird ein Transportauftrag verlangt,
*** wenn neue Einträge zugefügt wurden
    LOOP AT total INTO zmytab_total.
      IF zmytab_total-action = neuer_eintrag.
        new = ‘X’.
        EXIT.
      ENDIF.
    ENDLOOP.
    LOOP AT x_header.
      IF new = space.
        x_header-flag = vim_transport_denied.
      ELSE.
        x_header-flag = space.
      ENDIF.
      MODIFY x_header.
    ENDLOOP.
  ELSE.
*** In alle anderen Systemen kein Transportanschluß!
   LOOP AT x_header.
     x_header-flag = vim_transport_denied.
     MODIFY x_header.
   ENDLOOP.
 ENDIF.

ENDFORM.

Globale Datendefinition (Release 4.6C)

Bitte legen Sie noch die folgende Struktur zu Beginn des Includes an:

DATA: BEGIN OF zmytab_total.
        INCLUDE STRUCTURE zmytab.
DATA:   action(1),
        mark(1),
      END OF zmytab_total.

Das Coding ist in einem 4.5B-System nicht nötig.

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)